"""
例13　函数运行时间
1．问题描述
给定一系列描述函数进入和退出的时间，问每个函数的运行时间是
多少。
2．问题示例
输入s=["F1Enter10"，"F2Enter18"，"F2Exit19"，"F1Exit20"]，则输
出["F1|10"，"F2|1"]，即F1从10时刻进入，20时刻退出，运行时长为
10，F2从18时刻进入，19时刻退出，运行时长为1。
输入s=["F1Enter10"，"F1Exit18"，"F1Enter19"，"F1Exit20"]，则输
出["F1|9"]，即F1从10时刻进入，18时刻退出；又从19时刻进入，20时
刻退出，总运行时长为9。
"""


def get_function_runtime(s):
  """
  :type s: List[str]
  :rtype: List[str]
  """
  # 使用栈存储函数进入时间
  stack = []
  # 使用字典存储函数运行时间
  runtime_dict = {}
  for item in s:
    # 函数进入
    if item.endswith("Enter"):
      stack.append((item[:2], int(item[3:])))
    # 函数退出
    else:
      if stack:  # Check if stack is not empty before popping
          func_name, enter_time = stack.pop()
          runtime_dict[func_name] = runtime_dict.get(func_name, 0) + int(item[3:]) - enter_time
      else:
          # Handle the case where there's an exit event before an entry event
          print("Warning: Function exit event before entry:", item)
  # 构建输出结果
  result = []
  for func_name, runtime in runtime_dict.items():
    result.append(f"{func_name}|{runtime}")
  return result

# 测试用例
s1 = ["F1Enter10", "F2Enter18", "F2Exit19", "F1Exit20"]
s2 = ["F1Enter10", "F1Exit18", "F1Enter19", "F1Exit20"]

print(get_function_runtime(s1))
print(get_function_runtime(s2))
